package pimmodel;

import java.io.Serializable;

/**
 * 
 * Interface IAdresse:<br>
 * Das Interface zur Klasse Adresse.
 * 
 * @author Thomas Schoenfeld
 * @version (20120909_01)
 *
 */
public interface IAdresse extends Comparable<IAdresse>, Serializable {

	// Getter und Setter Methoden
	/**
	 * @return 	die Hausnummer
	 */
	public abstract String getHausnummer();

	/**
	 * @param 	hausnummer die Hausnummer
	 * 
	 * @throws	IllegalArgumentException falls der uebergebene Wert negativ ist 
	 */
	public abstract void setHausnummer(String hausnummer);

	/**
	 * @return 	die Postleitzahl
	 */
	public abstract String getPlz();

	/**
	 * @param 	plz die Postleitzahl
	 * 
	 * @throws	IllegalArgumentException falls der uebergebene String ungueltig ist 
	 */
	public abstract void setPlz(String plz);

	/**
	 * @return 	die Strasse
	 */
	public abstract String getStrasse();

	/**
	 * @param 	strasse die Strasse
	 * 
	 * @throws	IllegalArgumentException falls der uebergebene String ungueltig ist 
	 */
	public abstract void setStrasse(String strasse);

	/**
	 * @return 	der Ort
	 */
	public abstract String getOrt();

	/**
	 * @param 	ort der Ort
	 * 
	 * @throws	IllegalArgumentException falls der uebergebene String ungueltig ist 
	 */
	public abstract void setOrt(String ort);

	/**
	 * @return 	das Land
	 */
	public abstract String getLand();

	/**
	 * @param 	land das Land
	 * 
	 * @throws	IllegalArgumentException falls der uebergebene String ungueltig ist 
	 */
	public abstract void setLand(String land);

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	public abstract String toString();

	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	public abstract int hashCode();

	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	public abstract boolean equals(Object obj);

	/**
	 * compareTo	erlaubt einen lexikographischen Groessenvergleich mit einer anderen Adresse
	 * 
	 * @param		adresse	die zu vergleichende Adresse
	 * 
	 * @return		-1, falls die aktuelle Adresse lexikographisch kleiner,<br>
	 * 				 1, falls sie groesser und<br>
	 * 				 0, gleich der uebergebenen Adresse ist
	 * 
	 * @throws	IllegalArgumentException falls das uebergebene Objekt nicht vom Typ IAdresse ist.
	 */
	public abstract int compareTo(IAdresse adresse);

}